// FILE: Chip8RAM.cpp by Richard Hughes 03/05/2012
//
// DESC: Implements Chip 8 RAM

// INCLUDES
#include "Chip8RAM.h"

namespace Emulator
{
namespace Chip8
{

/*************************************************************/
//
// CLASS: Chip8RAM
//
// DESC: Defines the Chip 8 RAM
//
/*************************************************************/

// this inits the RAM
// it takes nothing
// it returns nothing
void Chip8RAM::Reset()
{
	memset(this->_memory, 0x0, sizeof(byte) * MAX_WRITABLE);

	this->SetFontInMemory();
} // end Reset

// this sets the font into memory
// it takes nothing
// it returns nothing
void Chip8RAM::SetFontInMemory()
{
	byte font [] =
	{
		// "0"
		0xF0,
		0x90,
		0x90,
		0x90,
		0xF0,

		// "1"
		0x20,
		0x60,
		0x20,
		0x20,
		0x70,

		// "2"
		0xF0,
		0x10,
		0xF0,
		0x80,
		0xF0,

		// "3"
		0xF0,
		0x10,
		0xF0,
		0x10,
		0xF0,

		// "4"
		0x90,
		0x90,
		0xF0,
		0x10,
		0x10,

		// "5"
		0xF0,
		0x80,
		0xF0,
		0x10,
		0xF0,

		// "6"
		0xF0,
		0x80,
		0xF0,
		0x90,
		0xF0,

		// "7"
		0xF0,
		0x10,
		0x20,
		0x40,
		0x40,

		// "8"
		0xF0,
		0x90,
		0xF0,
		0x90,
		0xF0,

		// "9"
		0xF0,
		0x90,
		0xF0,
		0x10,
		0xF0,

		// "A"
		0xF0,
		0x90,
		0xF0,
		0x90,
		0x90,

		// "B"
		0xE0,
		0x90,
		0xE0,
		0x90,
		0xE0,

		// "C"
		0xF0,
		0x80,
		0x80,
		0x80,
		0xF0,

		// "D"
		0xE0,
		0x90,
		0x90,
		0x90,
		0xE0,

		// "E"
		0xF0,
		0x80,
		0xF0,
		0x80,
		0xF0,

		// "F"
		0xF0,
		0x80,
		0xF0,
		0x80,
		0x80
	};

	memcpy(this->_memory + this->_smallFontStartAddress, font, sizeof(byte) * 16 * 5); // 5 bytes per character, 16 characters
} // SetFontInMemory

} // end Chip8
} // end Emulator

// EOF: Chip8RAM.cpp